﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SoftHotel.Models;
namespace SoftHotel.Controllers
{
    public class OrdenCompraController : Controller
    {
        //
        // GET: /OrdenCompra/
        static OrdenCompraDAO ocDAO = new OrdenCompraDAO();
        static DocCompraDAO listadocbusqueda = new DocCompraDAO();
        static DocCompraDAO listadoc = new DocCompraDAO();
        static OrdenCompra oc = new OrdenCompra();
        static SelectListItem[] productosCombo = null;
        private static OrdenCompra ordenCompra = new OrdenCompra();
        static List<DocCompraModel> busquedax;
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Index(DocCompraModel oc, string button)
        {

            if (button == "Buscar")
            {
                busquedax = listadoc.buscar(oc);
                listadocbusqueda.dbuscadis = busquedax;
            }
            if (button == "Nuevo") button = "Agregar";
            return RedirectToAction(button);
        }
        public ActionResult Buscar()
        {

            return View(listadocbusqueda);
        }
        [HttpPost]
        public ActionResult Buscar(string button)
        {

            if (button == "Regresar")
            {
                return RedirectToAction("Index");

            }
            return RedirectToAction("Index");
        }
        public ActionResult Agregar()
        {
            ordenCompra = new OrdenCompra();
            ViewBag.Hoteles = ocDAO.ObtenerHoteles();
            ViewBag.Monedas = ocDAO.ObtenerTipos("MONEDA_OC");
            ViewBag.FormaPagos = ocDAO.ObtenerTipos("FORMA_PAGO_OC");
            ViewBag.Prioridades = ocDAO.ObtenerTipos("PRIORIDAD_OC");
            ViewBag.Proveedores  = new SelectList(ocDAO.ObtenerProveedores(), "Text", "Value"); 
            ViewBag.Productos = ocDAO.ObtenerProductosXProveedor("");
            ordenCompra.productos = new List<ProductoModel>() { };
            ViewBag.listaProductos = ordenCompra.productos;
            return View(ordenCompra);
        }
        public ActionResult Models(string prov)
        {
            var listaProd = ocDAO.ObtenerProductosXProveedor(prov);
            return Json(Enumerable.Range(0, listaProd.ToList().Count).Select(x => new { value = listaProd[x].Value, text = listaProd[x].Text }), JsonRequestBehavior.AllowGet);
        }
        [HttpPost]
        public ActionResult Agregar(OrdenCompra oc, string button)
        {

            if (ModelState.IsValid)
            {

            }
            if (button == "Cancelar")
                return RedirectToAction("Index", "OrdenCompra");
            ordenCompra.total = "0";
            ordenCompra.cantidadProducto = "";
            ordenCompra.precioProducto = "";
            ViewBag.Hoteles = ocDAO.ObtenerHoteles();
            ViewBag.Monedas = ocDAO.ObtenerTipos("MONEDA_OC");
            ViewBag.FormaPagos = ocDAO.ObtenerTipos("FORMA_PAGO_OC");
            ViewBag.Prioridades = ocDAO.ObtenerTipos("PRIORIDAD_OC");
            ViewBag.Proveedores = ocDAO.ObtenerProveedores();
            ordenCompra.productos = new List<ProductoModel>() { };
            ViewBag.listaProductos = ordenCompra.productos;
            return View();
        }
        public ActionResult Agregar2(string id)
        {
            ordenCompra.Proveedor = id;
            ViewBag.Hoteles = ocDAO.ObtenerHoteles();
            ViewBag.Monedas = ocDAO.ObtenerTipos("MONEDA_OC");
            ViewBag.FormaPagos = ocDAO.ObtenerTipos("FORMA_PAGO_OC");
            ViewBag.Prioridades = ocDAO.ObtenerTipos("PRIORIDAD_OC");
            ViewBag.Proveedores = ocDAO.ObtenerProveedores();
            ViewBag.Productos = ocDAO.ObtenerProductosXProveedor(id);
            ordenCompra.productos = new List<ProductoModel>() { };
            ViewBag.listaProductos = ordenCompra.productos;
            return View(ordenCompra);
        }
        [HttpPost]
        public ActionResult Agregar2(OrdenCompra oc, string button)
        {
            ordenCompra.precioProducto = oc.precioProducto;
            ordenCompra.cantidadProducto = oc.cantidadProducto;
            ordenCompra.nombreProducto = oc.nombreProducto;
            ordenCompra.Sede = oc.Sede;
            ordenCompra.Moneda = oc.Moneda;
            ordenCompra.FormaPago = oc.FormaPago;
            ordenCompra.Proveedor = oc.Proveedor;
            ordenCompra.Prioridad = oc.Prioridad;
            ordenCompra.FechaEntrega = oc.FechaEntrega;
            //string mensaje = "";
            //bool esta = ocDAO.esta(prod.descripcion);
            //if (esta) mensaje = "El producto ya esta agregado";
            if (button == "Añadir" && ModelState.IsValid /*&& !listaprod.esta(prod.descripcion) && esta == false*/)
            {
                ocDAO.Add(ordenCompra);
            }
            else if (button == "Guardar" && ModelState.IsValid)
            {
                ocDAO.Guardar(ordenCompra);
                return RedirectToAction("Index", "OrdenCompra"); ;
            }
            else if (button == "Cancelar")
            {
                return RedirectToAction("Index", "OrdenCompra");
            }
            //ViewBag.mensaje = mensaje;

            ViewBag.Hoteles = ocDAO.ObtenerHoteles();
            ViewBag.Monedas = ocDAO.ObtenerTipos("MONEDA_OC");
            ViewBag.FormaPagos = ocDAO.ObtenerTipos("FORMA_PAGO_OC");
            ViewBag.Prioridades = ocDAO.ObtenerTipos("PRIORIDAD_OC");
            ViewBag.Proveedores = ocDAO.ObtenerProveedores();
            ViewBag.Productos = ocDAO.ObtenerProductosXProveedor(oc.Id);
            ViewBag.listaProductos = ordenCompra.productos;
            return View(ordenCompra);
        }
        public ActionResult Editar(string descripcion, string descripcion2,string button)
        {
            if (button == "Cancelar") return RedirectToAction("Index", "OrdenCompra");
            if (button == "Guardar") { ocDAO.Actualizar(oc); return RedirectToAction("Index", "OrdenCompra"); }
            if (button == "Añadir") ocDAO.InsertarProd(oc);
            if (descripcion2 != null)
            {
                ocDAO.ActualProd(oc, descripcion2);
            }
            else if (descripcion != null)
            {
                oc = ocDAO.ObtenerOCbyID(descripcion);
                
            }
            ViewBag.Hoteles = ocDAO.ObtenerHoteles();
            ViewBag.Monedas = ocDAO.ObtenerTipos("MONEDA_OC");
            ViewBag.FormaPagos = ocDAO.ObtenerTipos("FORMA_PAGO_OC");
            ViewBag.Prioridades = ocDAO.ObtenerTipos("PRIORIDAD_OC");
            ViewBag.Proveedores = ocDAO.ObtenerProveedores();
            ViewBag.Productos = ocDAO.ObtenerProductosXProveedor(oc);
            oc.productos = ocDAO.ObtenerProductosXOC(oc);
            ViewBag.listaProductos = oc.productos;
            return View(oc);
        }
        [HttpPost]
        public ActionResult Editar(OrdenCompra oc, string button)
        {
            if (button == "Cancelar") return RedirectToAction("Index", "OrdenCompra");
            if (button == "Guardar") { ocDAO.Actualizar(oc); return RedirectToAction("Index", "OrdenCompra"); }
            if (button == "Añadir" && ModelState.IsValid) ocDAO.InsertarProd(oc);
            ViewBag.Hoteles = ocDAO.ObtenerHoteles();
            ViewBag.Monedas = ocDAO.ObtenerTipos("MONEDA_OC");
            ViewBag.FormaPagos = ocDAO.ObtenerTipos("FORMA_PAGO_OC");
            ViewBag.Prioridades = ocDAO.ObtenerTipos("PRIORIDAD_OC");
            ViewBag.Proveedores = ocDAO.ObtenerProveedores();
            ViewBag.Productos = ocDAO.ObtenerProductosXProveedor(oc);
            oc.productos = ocDAO.ObtenerProductosXOC(oc);
            ViewBag.listaProductos = oc.productos;
            return View(oc);
        }
       /* public ActionResult Eliminar(descripcio+pmn)
        {
            ocDAO.eliminarProdOfOC(oc, descripcion);
            return View();
        }*/
    }
}
